Нашёл систему, где звук передаётся в таймер, который истекает через 0 секунд. В результате один и тот же звук может проигрываться несколько раз без всяких проблем. В инетике пишут мол это такой баг движка.
Если квест активен и не выполнен, а убитый - волк, то прибавляем 1 к переменной-счётчику для квеста. Если переменная равна 5, то засчитать выполнение квеста.
при касте проверяешь уровень скилла у кастера и заносишь в переменную[custom value цели] эту цифру. - Для баффов
для аур всё ещё веселее - либо через unit within range либо пиком всех юнитов в раиусе такм-то каждые 0.5 сек проверяешь у кого самый большой лвл способности, пикаешь всех союзных вокруг него и заносишь в переменную[custom value picked unit] эту цифру. Карта повиснет нахер и играть в неё будет невозможно.
Надо делать это с юнитом во время создания относительно уровня сложности. Если сложность *такая то* то создать юнита и сделать с ним *то-то* иначе, *другое то-то*
Если абуза боишься, можно просто поставить, что пассивка не действует чаще, например, раза в 0.5 секунды (таймером вешаешь на юнита "что-то" - абилу-маркер, хэш-значение и т. д., после окончания таймера убираешь, а в условиях - если у юнита это "что-то" есть, то пассивка не канает)
Если охото сделать зарыды со счетчиком то тут 2 пути:
Юзать стандартные абилки со счетчиком зарядов, а их только 2 совы охотницы и вспышки орудийного расчета гномов. Увы первая цель декор онли, вторая цель точка онли, на юнита никак, кстати хорошо подходит под кастом блинки, кастуется почти мгновенно, быстрее канала, без всяких рукомаханий.
Использовать N способностей с разными иконками, на которых будет изображен счетчик, изменяя уровень способности или вовсе весть скилл через 'Eneg' (Техника, скилл механика, позволяет изменять поля скиллов) то можно создать скиллы со счетчиком, допустим пока есть заряды у скилла нету кулдауна, скилл последнего заряда имеет кулдаун.
Увы туча ипорта да и найти качественные иконки со счетчиком дело непростое.
По названиям функций думаю понятно что они делают, рассмотрим по подробнее MeleeInitVictoryDefea( )
function MeleeInitVictoryDefeat takes nothing returns nothing
local trigger trig
local integer index
local player indexPlayer
// Create a timer window for the "finish soon" timeout period, it has no timer
// because it is driven by real time (outside of the game state to avoid desyncs)
set bj_finishSoonTimerDialog = CreateTimerDialog(null)
// Set a trigger to fire when we receive a "finish soon" game event
set trig = CreateTrigger()
call TriggerRegisterGameEvent(trig, EVENT_GAME_TOURNAMENT_FINISH_SOON)
call TriggerAddAction(trig, function MeleeTriggerTournamentFinishSoon)
// Set a trigger to fire when we receive a "finish now" game event
set trig = CreateTrigger()
call TriggerRegisterGameEvent(trig, EVENT_GAME_TOURNAMENT_FINISH_NOW)
call TriggerAddAction(trig, function MeleeTriggerTournamentFinishNow)
// Set up each player's mortality code.
set index = 0
loop
set indexPlayer = Player(index)
// Make sure this player slot is playing.
if (GetPlayerSlotState(indexPlayer) == PLAYER_SLOT_STATE_PLAYING) then
set bj_meleeDefeated[index] = false
set bj_meleeVictoried[index] = false
// Create a timer and timer window in case the player is crippled.
set bj_playerIsCrippled[index] = false
set bj_playerIsExposed[index] = false
set bj_crippledTimer[index] = CreateTimer()
set bj_crippledTimerWindows[index] = CreateTimerDialog(bj_crippledTimer[index])
call TimerDialogSetTitle(bj_crippledTimerWindows[index], MeleeGetCrippledTimerMessage(indexPlayer))
// Set a trigger to fire whenever a building is cancelled for this player.
set trig = CreateTrigger()
call TriggerRegisterPlayerUnitEvent(trig, indexPlayer, EVENT_PLAYER_UNIT_CONSTRUCT_CANCEL, null)
call TriggerAddAction(trig, function MeleeTriggerActionConstructCancel)
// Set a trigger to fire whenever a unit dies for this player.
set trig = CreateTrigger()
call TriggerRegisterPlayerUnitEvent(trig, indexPlayer, EVENT_PLAYER_UNIT_DEATH, null)
call TriggerAddAction(trig, function MeleeTriggerActionUnitDeath)
// Set a trigger to fire whenever a unit begins construction for this player
set trig = CreateTrigger()
call TriggerRegisterPlayerUnitEvent(trig, indexPlayer, EVENT_PLAYER_UNIT_CONSTRUCT_START, null)
call TriggerAddAction(trig, function MeleeTriggerActionUnitConstructionStart)
// Set a trigger to fire whenever this player defeats-out
set trig = CreateTrigger()
call TriggerRegisterPlayerEvent(trig, indexPlayer, EVENT_PLAYER_DEFEAT)
call TriggerAddAction(trig, function MeleeTriggerActionPlayerDefeated)
// Set a trigger to fire whenever this player leaves
set trig = CreateTrigger()
call TriggerRegisterPlayerEvent(trig, indexPlayer, EVENT_PLAYER_LEAVE)
call TriggerAddAction(trig, function MeleeTriggerActionPlayerLeft)
// Set a trigger to fire whenever this player changes his/her alliances.
set trig = CreateTrigger()
call TriggerRegisterPlayerAllianceChange(trig, indexPlayer, ALLIANCE_PASSIVE)
call TriggerRegisterPlayerStateEvent(trig, indexPlayer, PLAYER_STATE_ALLIED_VICTORY, EQUAL, 1)
call TriggerAddAction(trig, function MeleeTriggerActionAllianceChange)
else
set bj_meleeDefeated[index] = true
set bj_meleeVictoried[index] = false
// Handle leave events for observers
if (IsPlayerObserver(indexPlayer)) then
// Set a trigger to fire whenever this player leaves
set trig = CreateTrigger()
call TriggerRegisterPlayerEvent(trig, indexPlayer, EVENT_PLAYER_LEAVE)
call TriggerAddAction(trig, function MeleeTriggerActionPlayerLeft)
endif
endif
set index = index + 1
exitwhen index == bj_MAX_PLAYERS
endloop
// Test for victory / defeat at startup, in case the user has already won / lost.
// Allow for a short time to pass first, so that the map can finish loading.
call TimerStart(CreateTimer(), 2.0, false, function MeleeTriggerActionAllianceChange)
endfunction
Вроде много, но тут все просто, создается три триггера один следит за тем сколько построил зданий любой играющий игрок, второй следит сколько зданий погибло у любого играющего игрока, ну а третий следит за теми кто ливнул, чтобы их не преребирать, два прочих вспомогательные, следят за отмненой строительства и прочее.
Итого делаем вывод, чтобы узнать проиграл или нет игрок, нам нужно узнать сколько у него живых зданий, меньше 1 игрок проиграл. А реализовать это можно как угодно, триггерами следящими за смертями и прочим или таймером, который будет переодически считать все здания каждого игрока и давать поражение тем игрокам у кого не осталось ни одного здания...
Что за идиотия? Блин всех крипов что ты создал - заносишь в группу спецально созданную для подсчета юнитов.
Делаешь триггер с событием - юнит игрока N (нужный тебе игрок) умирает, условие умерший юнит есть в группе для подсчета юнитов.
Действие - удалить юнита из группы, удалить труп (желательно, то просадки фпс в 2017 вам не простят)
Второй триггер раз в 3 сек. смотрит число юнитов в групее, если число меньше 1, то триггер отключается, и запускается таймер на новую волну, когда таймер истечет и начнется спаун, крипов, переодический триггер счетсчик снова включается.
Примитивный как счеты алгоритм.
Блин - видел очень давно похожую реализацию, но походу 100500 людей так и не научились это делать, написать чтоли самому...
Суть - для продажи предметов, войск, всяких древ талантов - используйте спеллбук + способности на основе - поставка ресурсов.
Помещаем в спеллбук до 11 способностей на основе "Поставка ресусов" - это аналог канала, настраивается приказ и прочее, но самое главное есть поля - стоймость золотом, стоймость деревом, т.е эта абилка может требовать не только ману но и золото с деревом. Так же там стоит вкладка, заряд игрока владельца - очень важная настройка:
Заряд игрока владельца включен - тогда за каст ресурсы будут списыватся только у игрока владельца юнита, при этом неважно что вашим юнитом управляет другой игрок.
Заряд игрока владельца выключен - тогда при касте этой абилки ресурсы будут списыватся со счета игрока, который и отдал приказ, это даже можно отследить, но немного геморойно:
Суть: делаем триггер который срабатывает на приказ каста поставки ресурсов, или события юнит начинает каст способности, условия по вкусу и действия - создать еще 1 триггер, в события которого добавить - ресурсы игрока N изменились (для каждого игрока способного купить), условием - ресурсов стало меньше на стоймость каста абилки, и действие - выключить триггер, записать GetTriggerPlayer() в глобальную переменную или в еще куда, это и будет наш игрок который кликнул на поставку ресурсов, ну и далее утилизируем триггер, удаляя действия. Можно написать все действия в условии, тогда не придется удалять действия.
Так можно отследить кто кастанул абилку поставки ресурсов если юнитом управляют несколько игроков.
У тролля просто морф в другого тролля.
Вообще триггерно можно сделать так, чтобы изучалась невидимая пустышка (на основе какой-нибудь предметной пассивки с нулевыми значениями сделать геройскую абилу), а потом в зависимости от условий давать одну или другую активку и задавать ее лвл по лвлу той пассивки.
Только лучше еще эти активки спрелоадить (дать чему-то изначально на карте), чтобы лага при их первом добавлении не было.
koloff:
Объявляются переменные в начале.
local lightning l
call AddLightningEx(codeName, true, GetLocationX(where1), GetLocationY(where1), GetLocationZ(where1), GetLocationX(where2), GetLocationY(where2), GetLocationZ(where2))
set l = bj_lastCreatedLightning
Возможно, по средству скрещивания через триггер, видел в близовской карте Хеллоуин! Это что то типо ДОТЫ, только от близзард, есть по умолчанию в любом варике, старше версии 1.18. Легко открывается, триггер можно перезалить в свою карту.
not_name:
я карту посмотрел, да, пытался сделать похожее
только там с очередью приказов шляпа выходит, поэтому я лучше сделаю все визуально
в общем, реализовал, как и говорил выше - при смерти сразу воскрешаю героя на месте гибели, пауза, анимация, таймер, по прошествии таймера - выдаю все нужное, при повторной смерти - забираю
адекватно работает с крестами
Для каждого дерева нужны три модели: обычная, неактивная (с названием Doodads\Terrain\AshenTree\AshenTree0S.mdx, например) и неактивная разрушенная (Doodads\Terrain\AshenTree\AshenTree0D.mdx). У неактивных моделей должна быть только одна анимация — Stand. У первой — только деревце, у второй — только пенёк, соответственно.
Когда с деревом никто не взаимодействует, отображаются неактивные модели. Ты их не заменил, потому такая вот фигня.
Как сделать полноценно работающие деревья с моделями, не заменяющими стандартные, я не знаю. Возможно, никак.
Может я что-то не так делаю но когда я ставлю в маг уроне отрицательное значение он вообще перестает наносится. Какую графу и как изменять не подскажите?
а не надо ставить отрицательное значение
1.00 это 100% урона (норма)
0.80 это 80% урона (на 20% ниже нормы)
1.40 это 140% урона (на 40% больше норма)
Какая еще формула? Это математика начальных классов. 25*50/100 = 12.5.
Ты проверяешь можешь как до срабатывания прока, так и после и от этого менять структуру. Вероятность во всех случаях 12.5%.
Через txt команды заменить атаку на патруль, либо скрыть через мемхак, или делать юнит нетральный и дать ему канал приказа и будет иметь 12 способностей это смотря как вам удобно!
Если способности на прямую героя то можете настраивать порядок, а если через спелбук то нужно прелоад делать
так как там нет геометрии (а только источники частиц), то так просто в один клик не рассчитываются границы
надо вручную создавать объект "форма" с нужным радиусом и координатами, в редакторе узлов model editor'а
GRESHNIK1, ошибку вызывает каждая из 3 моделей?
или лишь 1 из них?
ну а вообще критует из за того что модель кривая
либо брось это дело либо сконверти их в mdl и правь через блокнот
Tiodor, стоп, как это по тем же точкам? При изменении положения базовой кости, разве присоединённые к ней остальные не должны меняться? В-общем не могу я исправить)) Эта модель должна заменять архивную... К какой-либо карте она не относится. Так-то =(
После усердного копания архивов игры и парочки тестов, нашёл для себя выход) В War3Patch.mpq/Units/UnitUI.slk хранились нужные мне данные. Ранее подобных проблем не было (о почему же!), поэтому и не пытался издеваться над игрой)
Я,конечно,вообще ничего не понимаю в создании моделей,но всё таки попытаюсь помочь.
Сколько раз ты пытался вычислить проблему?Скорее всего она заключается в самом элементарном месте,в котором ты полностью уверен.Перепроверь ещё раз всё и максимально подробно.В триггерах ошибки чаще всего получаются именно по причине уверенности в том,что их нет и быть не может.И желательно скинь модель этой крестьянки,чтобы опытные 3D-дизайнеры смогли проверить её и назвать все ошибки и недочёты.
Полагаю, действия "группа игроков" - лишние. Просто пикай юнитов. И не в регионе, а в радиусе. Там должно быть действие "пикнуть юнитов в радиусе, которые соответствуют каким-то условиям". Вот в matching condition и проверяй "правильность" юнита.
Физический - тип атаки: какой надо(например осадный), тип урона: обычный - изменяется физической защитой.
Магический - тип атаки: заклинание, тип урона: магия - изменяется магической защитой.
Смешанный - тип атаки: заклинание, тип урона: обычный - изменяются обеими защитами
чистый -тип атаки: сила тьмы, тип урона: универсальный - не снижается защитой
Источники магической защиты - константы урона, благославение элуны(складывающиеся), рунные браслеты(нескладывающиеся, если добавлены последними).
Источники физической защиты - ... просто смотри на пункт защита у юнита.
Наименее ресурсозатратным для игрового процесса будет кастовать саму волну через отдельного дамми, который создаётся специально и только для волны силы. Сама волна наносит 1 ед урона. И потом определив, тип юнит-источника урона - наносим нужный урон от лица героя-хозяина юнита "волна силы".
В варианте "чекать группы каждые 0.0х сек" будет засоряться память и скорее всего будут подлагивания, в варианте со спец-дамиками засорится РО, выбирай из двух зол.
Astra, очень багано
так как после последней атаки может многое изменится
так же урон при событие юнит получает урон зависит от брони и прочих резистов
если юнит с уроном 100 нанёс удар по врагу с физ резистом 50% а потом получил бафф/предмет на +100 урона то скилом нанесёт 50 урона хотя должен был бы нанести 200
тут нужно юзать бд
при касте скила брать из бд начальный урон юнита, бонусы предметов и бонусы всех бафов
тема кстати уже много раз поднималась
и каждый раз все заканчивалось тем что афтар забивал на подобную систему либо писал "вы все нубы/тролли и не знаете/не хотите сказать как сделать это легко и просто"
ибо подобная система требует кучи кода и как минимум 30 прочтённых статей по jass
вот статья о бд
Собственные попытки в студию, что не получается?
Напомним - ЭТО НЕ СТОЛ ЗАКАЗОВ, здесь задают вопросы про реализацию тех или иных вопросов, спрашивают про ошибки, оптмизацию, отдельные функции. Я не увидел в вашем вопросе ничего кроме невнятного описания механики способности, " вокргу кого то там огненные столбы возникают, и еще порча"...
Filius Dei, во вредные советы подъехали...
Русификатор очень поможет тем кто собрался ломануть чужую карту и сделать её мод, прям ваще жир...
Потом нубам вроде сударя не стоит бежать ломать чужую карту, чето там пытатся копировать - это все бесполезно, недавно был похожий вопрос - помогите взломать карту за вознаграждение, карту сломали - ну а дальше что? Он неспособен ничего сделать потому что просто не понимает как?
Играя в некую карту вы мните себя великими балансерами и картоделами, мол да чё там, шяс подправлю пару значений и все будет норм - нет не будет, это не так просто как может показаться, без понимания устройства карты и знания Jass вам нечего там делать, вы тупо ничего не сможете изменить, да даже скопировать и вставить!
Помните что без труда не выловишь и рыбку из пруда, т.е изи способов в 1 кнопку взять и запилить чужую карту так как вам хочется или вдруг стащить всех героев себе в карту нет, а уж теболее не случится так что вам кто то возьмет и все это сделает вам за спасибо...
Если юнит под баффом "чума" - добавить в отряд Чума
Иначе - удалить из отряда Чума
Триггер
С. Таймер Чума
Отряд выбрать юнитов Чума
Если юнит умер
Д. создать юнита в позиции выбранного юнита.
Через что уничтожаешь? Если через килл, то конечно умирает и нейтральный.
Если наносить от какого-то даммика урон в мильены, то не умрет нейтральный.
Можно от даммика развеяние нежити за 0.01 сек.
Заменять можно, внося значение золота в переменную и потом, создавая новый рудник, ставить количество золота в него из переменной, благо это даже в ГУИ реализовано.
так как там нет геометрии (а только источники частиц), то так просто в один клик не рассчитываются границы
надо вручную создавать объект "форма" с нужным радиусом и координатами, в редакторе узлов model editor'а
Стандартный ИИ никак, только если вы замените канал какими-то другим скиллом, который юзает ИИ в схожей ситуации ( если нужно чтобы ии юзал спелл в толпе то подойдет вызов волка или стомп в качестве пустышки). Ну или совсем радикальный вариант, писать свой ИИ.
Nikolay36, очень просто GetUnitTypeId( GetSpellAbilityUnit() )
Как бы это что то ненормальное, спрашивать про элементарные вещи которые описаны в статьях по jass в 101 месте, да и вовсе есть список jass функций из common.j...
Анимация - change unit flying height - указываешь высоту в точках и скорость, с которой юнит из текущей высоты сделает новую, точек в секунду.
Например изменить высоту юнита с высотой 0 до 300 на скорости 900 - плавно установит высоту юнита до 300 за 0.33 секунды (300/900 = 0.33)
Чтобы нелетающий юнит мог плавно менять высоту не забудь добавить ему способность "Превратиться в ворона", после добавления можешь сразу удалить, юнит сможет менять высоту.
Diazon, а чем сам манабёрн не подходит? Дай еще своим монстрам класс вызванные, будет им+ 20 чистого дмг и спецэффект манабёрна (цвет тока будет не розовый, а желтоватый у спецэффекта )
Манаберн наносит доп урона суммонам, но является орбом (не сочетается с другими орбами ) , хотя тесты и показали что манабёрн ближе по механике к критам чем к орбам и башам...
Мб это негейшин (амулет защиты) из него мона делать пассивку с кулдауном, для активации кастануть даммиком какойнить скилл в юнита с негейшином, будет кд.
Потом как кд пройдет негейшин удалить и добавить пассивку, ну и так далее.
Это лечится не юзаньем сферы замедления для подобных пассивок.
Лич долго кочевряжился с этой бедой, сфера замдления перебивает тучу орбов + не стакается с критами\башами.
Делайте триггерный орб (хотя-бы только для тех у кого есть активные автокаст орбы)
Очередной вопрос, где не приложен файл. Тебе какой ответ нужен? Что надо статьи читать и больше в w3me и mdlvis практиковаться, либо конкретное решение проблемы с твоим портретом демон хантера?
avuremybe, с буфером игры (кэш) можно работать так же как с хэш таблицей FrigatPlay, в буфер игры можно сохранять не только юнитов но и предметы
просто перебираем циклом все предметы и сохраняем в кэш
а потом в следующей карте извлекаем их из кэша
Ошибка в коде, jass работает везде. pro100master, пишет бред, ибо незнает что все карты для warcraft 3 имеют сценарий на Jass, т.к все ваши триггеры в итоге преобразуются в jass и хранятся в war3map.j, тоже самое и с АИ, которое для кампаний изначально написано на jass и прекрасно работает.
Смотрите где у вас ошибки, cjass\vjass интерпретаторы могут не верно работать с картами кампаний, пробуйте написать код на чистом jass без надстроек.
» WarCraft 3 / Система заданий
» WarCraft 3 / Уровень юнита
» WarCraft 3 / Стак способностей
» WarCraft 3 / Подскажите условие, пожалуйста
» WarCraft 3 / Проблемы с физическим размером
» WarCraft 3 / Бонусная атака
» WarCraft 3 / не отображается моделька в игре
» WarCraft 3 / Сопротивление
» WarCraft 3 / Как изменить максимальную и максимальную атаку героя?
» WarCraft 3 / Модель не открывается в редакторе варкрафта
» WarCraft 3 / Анимации в mdlvis
» WarCraft 3 / Триггерный АОЕ урон
» WarCraft 3 / Триггеры
» WarCraft 3 / MinimapPing
» WarCraft 3 / лимит заданий
» WarCraft 3 / Не отображаются эффекты на модели.
» WarCraft 3 / Из за чего может лагать?
» WarCraft 3 / Не выбирается модель в игре
» WarCraft 3 / Id Способности
» WarCraft 3 / Высота юнита
» WarCraft 3 / Пассивка при атаке
» WarCraft 3 / Источник частиц
» WarCraft 3 / Кампания
» WarCraft 3 / Помогите найти наработку